/**
 * org.vz.product.data.collect.web
 * @since : jdk 1.8
 */
package org.vz.product.collect.maintain.web;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.vz.product.collect.maintain.domain.Acquisition;
import org.vz.product.collect.maintain.domain.AcquisitionQueue;
import org.vz.product.collect.maintain.domain.ActivemqHost;
import org.vz.product.collect.maintain.domain.KettleTransformation;
import org.vz.product.collect.maintain.domain.MessageResult;
import org.vz.product.collect.maintain.domain.TransLog;
import org.vz.product.collect.maintain.domain.TransMapRows;
import org.vz.product.collect.maintain.domain.TransRecordBlack;
import org.vz.product.collect.maintain.domain.WorkStatistics;
import org.vz.product.collect.maintain.domain.entity.StatResult;
import org.vz.product.collect.maintain.domain.entity.Transformation;
import org.vz.product.collect.maintain.service.AcqclusterService;
import org.vz.product.collect.maintain.service.AcquisitionService;
import org.vz.product.collect.maintain.service.ActiveMqService;
import org.vz.product.collect.maintain.service.TransLogService;
import org.vz.product.collect.maintain.service.TransMapRowsService;
import org.vz.product.collect.maintain.util.PageUtil;
import org.vz.product.collect.maintain.util.StringUtil;



/**
 * @author      lanxuyu
 * @CreateTime  2017年9月6日 上午11:02:38
 * @version     1.0.0
 * @description 日志管理
 */
@Controller
@RequestMapping("/log")
public class LogController {
	@Autowired
	TransLogService tlService;
	@Autowired
	TransMapRowsService tmrService;
	@Autowired
	AcquisitionService acService;
	@Autowired
	AcqclusterService clusterService;
	@Autowired
	ActiveMqService amService;
	
	/**
	 * 
	 * @description  zookeeper主动报错
	 * @author       chenhuaijin
	 * @CreateTime   2017年9月25日 下午6:14:01
	 * @return
	 */
	@RequestMapping("/clusterMetrics")
	@ResponseBody
	public String clusterMectrics(){
		List<ActivemqHost> list = clusterService.currentState();
		Map<String,List<ActivemqHost>> lisMap = new HashMap<String, List<ActivemqHost>>();
		lisMap.put("clusterMetrics", list);
		Map<String,Object> rlt =new HashMap<String, Object>();
		if(list != null){
			rlt.put("status", "1");
			rlt.put("msg", "查询成功");
		}else{
			rlt.put("status", "-1");
			rlt.put("msg", "查询失败");
		}
		
		rlt.put("data", lisMap);
		return StringUtil.toJsonString(rlt);
	}
	/**
	 * 
	 * @description  获取activeMQ出、入队消息总数
	 * @author       lanxuyu
	 * @CreateTime   2017年10月18日 下午5:50:14
	 * @return
	 */
	@RequestMapping("/messageCount")
	@ResponseBody
	public String totalMessageCount(@RequestParam(name="startTime",defaultValue="")String startTime,
			@RequestParam(name="endTime",defaultValue="")String endTime){
		
		if("".equals(startTime)&&"".equals(endTime)){
			startTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd");
			endTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
			startTime="2015-5-5";
			endTime="2017-10-20 09:32:56";
		}else if(!("".equals(startTime))&&"".equals(endTime)){
			endTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
		}else if("".equals(startTime)&&!("".equals(endTime))){
			return "";
		}
		
		String baseUrl="http://172.16.6.21:8161/api/jolokia";
		List<MessageResult> totalMessageCount = amService.totalMessageCount(baseUrl,startTime,endTime);
		return StringUtil.toJsonString(totalMessageCount);
		
	}
	
	/**
	 * 
	 * @description  显示日志管理界面
	 * @author       lanxuyu
	 * @CreateTime   2017年9月13日 下午3:13:07
	 * @return
	 */
	@RequestMapping("/manage")
	public String showTestPage(){
		
		return "logManage";
	}
	/**
	 * 
	 * @description  后台维护任务统计
	 * @author       lanxuyu
	 * @CreateTime   2017年11月14日 上午11:21:15
	 * @param pageNo
	 * @param pageSize
	 * @param queryName
	 * @return
	 */
	@RequestMapping("/statisticsList")
	@ResponseBody
	public String statisticsList(@RequestParam(value="pageNo",defaultValue="1")long pageNo,@RequestParam(value="pageSize",defaultValue="20")long pageSize,
			@RequestParam(value="queryName",defaultValue="")String queryName){
		
		PageQuery<Acquisition> pageQuery = new PageQuery<Acquisition>(pageNo, pageSize);
		Map<String, Object> pageList = tlService.pageList(pageQuery,queryName);
		return StringUtil.toJsonString(pageList);	
	}
	/**
	 * 
	 * @description  后台管理获取执行成功的消息详情
	 * @author       lanxuyu
	 * @CreateTime   2017年10月18日 上午10:37:27
	 * @param acquisition
	 * @param pageNo
	 * @param pageSize
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	@RequestMapping("/getMsgSuccess")	
	@ResponseBody
	public String getMsgSuccess(Acquisition acquisition,@RequestParam(value="pageNo",defaultValue="1")long pageNo,@RequestParam(value="pageSize",defaultValue="20")long pageSize,
			@RequestParam(value="startTime",defaultValue="")String startTime,@RequestParam(value="endTime",defaultValue="")String endTime){
		PageQuery<AcquisitionQueue> query=new PageQuery<>(pageNo, pageSize);
		
		Map<String, Object> detail=tlService.getMsgSuccess(acquisition,query,startTime,endTime);
		return StringUtil.toJsonString(detail);	
	}
	/**
	 * 
	 * @description 大屏显示 获取任务执行成功的消息详情
	 * @author       lanxuyu
	 * @CreateTime   2017年11月7日 下午1:57:51
	 * @param acquisition
	 * @param pageNo
	 * @param pageSize
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	@RequestMapping("/msgSuccess")	
	@ResponseBody
	public String msgSuccess(Acquisition acquisition,@RequestParam(value="pageNo",defaultValue="1")long pageNo,@RequestParam(value="pageSize",defaultValue="20")long pageSize,
			@RequestParam(value="startTime",defaultValue="")String startTime,@RequestParam(value="endTime",defaultValue="")String endTime){
		PageQuery<AcquisitionQueue> query=new PageQuery<>(pageNo, pageSize);
		
		Map<String, Object> detail=tlService.getMsgSuccess(acquisition,query,startTime,endTime);
		StatResult<Map<String,Object>> result = new StatResult<Map<String,Object>>();
		
		result.setStatus(1);
		result.setMsg("查询成功！");
		result.setData(detail);
		return StringUtil.toJsonString(result);	
	}
	/**
	 * 
	 * @description  大屏显示获取任务执行失败的消息详情
	 * @author       lanxuyu
	 * @CreateTime   2017年11月7日 下午1:57:51
	 * @param acquisition
	 * @param pageNo
	 * @param pageSize
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	@RequestMapping("/msgFailed")	
	@ResponseBody
	public String msgFailed(TransRecordBlack transRecordBlack,@RequestParam(value="pageNo",defaultValue="1")long pageNo,@RequestParam(value="pageSize",defaultValue="20")long pageSize,
			@RequestParam(value="startTime",defaultValue="")String startTime,@RequestParam(value="endTime",defaultValue="")String endTime){
		PageQuery<TransRecordBlack> query=new PageQuery<>(pageNo, pageSize);
		
		Map<String, Object> detail=tlService.getMsgFailed(transRecordBlack, query, startTime, endTime);
		StatResult<Map<String,Object>> result = new StatResult<Map<String,Object>>();
		
		result.setStatus(1);
		result.setMsg("查询成功！");
		result.setData(detail);
		return StringUtil.toJsonString(result);	
	}
	/**
	 * 
	 * @description  大屏显示获取任务成功成功入库详情
	 * @author       lanxuyu
	 * @CreateTime   2017年11月7日 下午1:57:51
	 * @param acquisition
	 * @param pageNo
	 * @param pageSize
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	@RequestMapping("/msgPlatform")	
	@ResponseBody
	public String msgPlatform(TransMapRows transMapRows,@RequestParam(value="pageNo",defaultValue="1")long pageNo,@RequestParam(value="pageSize",defaultValue="20")long pageSize,
			@RequestParam(value="startTime",defaultValue="")String startTime,@RequestParam(value="endTime",defaultValue="")String endTime){
		PageQuery<TransMapRows> query=new PageQuery<>(pageNo, pageSize);
		
		Map<String, Object> detail=tlService.getPlatform(transMapRows, query, startTime, endTime);
		StatResult<Map<String,Object>> result = new StatResult<Map<String,Object>>();
		result.setStatus(1);
		result.setMsg("查询成功！");
		result.setData(detail);
		return StringUtil.toJsonString(result);	
	}
	/**
	 * 
	 * @description  后台管理获取执行失败的消息详情
	 * @author       lanxuyu
	 * @CreateTime   2017年10月18日 上午10:37:54
	 * @param transRecordBlack
	 * @param pageNo
	 * @param pageSize
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	@RequestMapping("/getMsgFailed")
	@ResponseBody
	public String getMsgFailed(TransRecordBlack transRecordBlack,@RequestParam(value="pageNo",defaultValue="1")long pageNo,@RequestParam(value="pageSize",defaultValue="20")long pageSize,
			@RequestParam(value="startTime",defaultValue="")String startTime,@RequestParam(value="endTime",defaultValue="")String endTime){
		PageQuery<TransRecordBlack> query=new PageQuery<>(pageNo, pageSize);
		Map<String, Object> detail=tlService.getMsgFailed(transRecordBlack,query,startTime,endTime);
		return StringUtil.toJsonString(detail);	
		
	}
	/**
	 * 
	 * @description  大屏显示所有执行失败消息详情
	 * @author       lanxuyu
	 * @CreateTime   2017年11月7日 下午1:57:51
	 * @param pageNo
	 * @param pageSize
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	@RequestMapping("/allMsgFailed")
	@ResponseBody
	public String allMsgFailed(@RequestParam(defaultValue="1970-1-1 00:00:00")String startTime,@RequestParam(value="endTime",defaultValue="")String endTime){
		StatResult<List<TransRecordBlack>> detail=tlService.allMsgFailed(startTime,endTime);
		return StringUtil.toJsonString(detail);	
		
	}
	/**
	 * 
	 * @description  后台管理获取所有入库详情
	 * @author       lanxuyu
	 * @CreateTime   2017年10月18日 上午10:38:16
	 * @param transMapRows
	 * @param pageNo
	 * @param pageSize
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	@RequestMapping("/getPlatform")	
	@ResponseBody
	public String getPlatform(TransMapRows transMapRows,@RequestParam(value="pageNo",defaultValue="1")long pageNo,@RequestParam(value="pageSize",defaultValue="20")long pageSize,
			@RequestParam(value="startTime",defaultValue="")String startTime,@RequestParam(value="endTime",defaultValue="")String endTime){
		PageQuery<TransMapRows> query=new PageQuery<>(pageNo, pageSize);
		Map<String, Object> detail=tlService.getPlatform(transMapRows,query,startTime,endTime);
		return StringUtil.toJsonString(detail);	
		
	}
	/**
	 * 
	 * @description  大屏显示查询所有成功入库详情
	 * @author       lanxuyu
	 * @CreateTime   2017年11月7日 上午11:09:05
	 * @param pageNo
	 * @param pageSize
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	@RequestMapping("/allPlatform")	
	@ResponseBody
	public String allPlatform(@RequestParam(value="pageNo",defaultValue="1")long pageNo,@RequestParam(value="pageSize",defaultValue="20")long pageSize,
			@RequestParam(value="startTime",defaultValue="1970-1-1 00:00:00")String startTime,@RequestParam(value="endTime",defaultValue="")String endTime){
		PageQuery<TransMapRows> query=new PageQuery<>(pageNo, pageSize);
		StatResult<Map<String,Object>> detail=tlService.allPlatform(query,startTime,endTime);
		return StringUtil.toJsonString(detail);	
		
	}
	/**
	 * 
	 * @description  正在运行的任务
	 * @author       lanxuyu
	 * @CreateTime   2017年11月14日 上午11:23:54
	 * @param clasify
	 * @return
	 */
	@RequestMapping("/workingTrans")	
	@ResponseBody
	public String workingTrans(){
		StatResult<Map<String, Object>> detail=tlService.getWorkingTrans();
		return StringUtil.toJsonString(detail);	
		
	}
	
	/**
	 * 
	 * @description  等待运行的任务
	 * @author       lanxuyu
	 * @CreateTime   2017年11月14日 上午11:23:54
	 * @param clasify
	 * @return
	 */
	@RequestMapping("/waitingTrans")	
	@ResponseBody
	public String waitingTrans(){
		StatResult<Map<String, Object>> detail=tlService.getWaitingTrans();
		return StringUtil.toJsonString(detail);	
		
	}
	
	@RequestMapping("/batchPage/{ktrName}")	
	public String batchPage(@PathVariable(value="ktrName")String ktrName,Map<String,Object> front){
		front.put("ktrName", ktrName);
		return "batch";
		
	}
	
	/**
	 * 
	 * @description  任务批次信息列表
	 * @author       lanxuyu
	 * @CreateTime   2017年9月13日 下午3:07:52
	 * @param pageNo	当前页码
	 * @param pageSize	页面数据条数
	 * @return
	 */
	@RequestMapping("/batchList/{ktrName}")
	@ResponseBody
	public String batchList(@PathVariable(value="ktrName")String ktrName,@RequestParam(value="pageNo",required=false)long pageNo,@RequestParam(value="pageSize",required=false)long pageSize){
		PageQuery<TransLog> query = new PageQuery<TransLog>(pageNo,pageSize);
		Map<String,Object>param=new HashMap<>();
		param.put("ktrName", ktrName);
		query.setParas(param);
		PageQuery<TransLog> queryResult = tlService.batchList(query);
		Map<String,Object> tlList=new HashMap<>();
		tlList.put("rows", queryResult.getList());
		tlList.put("pageNo",queryResult.getPageNumber());
		tlList.put("pageSize", queryResult.getPageSize());
		tlList.put("pageCounts", queryResult.getTotalPage());
		tlList.put("total", queryResult.getTotalRow());
		String translogs= StringUtil.toJsonString(tlList);
		return translogs;
	}
	/**
	 * 
	 * @description  批次详情数据列表
	 * @author       lanxuyu
	 * @CreateTime   2017年9月13日 下午3:05:06
	 * @param transMapRows 	批次Id
	 * @param pageNumber	当前页码
	 * @param pageSize		每页数据条数
	 * @param startTime		起始时间
	 * @param endTime		截止时间
	 * @return
	 */
	@RequestMapping("/detailList/{idBatch}")
	@ResponseBody
	public String detailList(TransMapRows transMapRows,@RequestParam(value="pageNumber",defaultValue="1")Integer pageNumber,@RequestParam(value="pageSize",defaultValue="10")Integer pageSize,
			@RequestParam(value="startTime",defaultValue="")String startTime,@RequestParam(value="endTime",defaultValue="")String endTime){
			List<TransMapRows> tmrs = tmrService.selectByIdBatch(transMapRows);
			if(tmrs.size()>0){
				PageUtil page = tlService.getBatchDetail(pageNumber, pageSize,tmrs,startTime,endTime);
				String pageString = StringUtil.cycleListToString(page);
				return pageString;
			}
			return "";
	}
	/**
	 * 
	 * @description  大屏显示统计(默认为当天)所有采集情况
	 * @author       lanxuyu
	 * @CreateTime   2017年9月18日 上午11:21:21
	 * @return
	 */
	@RequestMapping("/statistics")
	@ResponseBody
	public String statistics(@RequestParam(value="startTime",defaultValue="")String startTime,@RequestParam(value="endTime",defaultValue="")String endTime){		
		if("".equals(startTime)&&"".equals(endTime)){
			startTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd");
			endTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
			
		}else if(!("".equals(startTime))&&"".equals(endTime)){
			endTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
		}else if("".equals(startTime)&&!("".equals(endTime))){
			StatResult<Object> statResult = new StatResult<>();
			
			statResult.setMsg("查询失败!");
			statResult.setStatus(0);
			return StringUtil.toJsonString(statResult);
		}
		System.out.println(startTime+" : "+endTime);
		StatResult<Map<String, Object>> sr = tlService.statistics(startTime,endTime);
		 Map<String, Object> data = new HashMap<>();
		 Map<String, Object> errorCountResult = sr.getData();
		 StatResult<Map<String, Object>> workingTrans=tlService.getWorkingTrans();
		 data.put("workingTrans",workingTrans.getData());
		 StatResult<Map<String, Object>> waitingTrans=tlService.getWorkingTrans();
		 data.put("waitingTrans", waitingTrans.getData());
		 String baseUrl="http://172.16.6.21:8161/api/jolokia";
		 StatResult<Map<String, Object>> waitReceiveKtr = amService.waitReceiveKtr(baseUrl,startTime,endTime);
		 data.put("waitReceiveKtr", waitReceiveKtr.getData());
		 StatResult<List<TransRecordBlack>> errorDetailResult=tlService.allMsgFailed(startTime,endTime);
		 errorCountResult.put("detail", errorDetailResult.getData());
		 data.put("errors", errorCountResult);
		 StatResult<Map<String, Object>> statResult= new StatResult<>();
		 statResult.setStatus(1);
			statResult.setMsg("查询成功！");
			statResult.setData(data);
		return StringUtil.toJsonString(statResult);
	}
	/**
	 * 
	 * @description  大屏显示统计当天所有采集详情
	 * @author       lanxuyu
	 * @CreateTime   2017年11月14日 上午11:25:27
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	@RequestMapping("/statistics/detail")
	@ResponseBody
	public String statisticsDetail(@RequestParam(value="pageNo",defaultValue="1")long pageNo,@RequestParam(value="pageSize",defaultValue="20")long pageSize){
		
		PageQuery<Acquisition> pageQuery = new PageQuery<Acquisition>(pageNo, pageSize);
		Map<String, Object> statisticsDetail = tlService.statisticsDetail(pageQuery);
		String statistics = StringUtil.toJsonString(statisticsDetail);
		return statistics;
	
	}
	/**
	 * 
	 * @description  采集任务统计不分页
	 * @author       lanxuyu
	 * @CreateTime   2017年11月14日 上午10:41:22
	 * @return
	 */
	@RequestMapping("/statistics/allDetail")
	@ResponseBody
	public String statisticsAllDetail(@RequestParam(value="startTime",defaultValue="")String startTime,@RequestParam(value="endTime",defaultValue="")String endTime){
		if("".equals(startTime)&&"".equals(endTime)){
			startTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd");
			endTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
			
		}else if(!("".equals(startTime))&&"".equals(endTime)){
			endTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
		}else if("".equals(startTime)&&!("".equals(endTime))){
			StatResult<Object> statResult = new StatResult<>();
			statResult.setMsg("查询失败!");
			statResult.setStatus(0);
			return StringUtil.toJsonString(statResult);
		}
		StatResult<List<WorkStatistics>> statisticsDetail = tlService.statisticsAllDetail(startTime,endTime);
		String statistics = StringUtil.toJsonString(statisticsDetail);
		return statistics;
	
	}
	/**
	 * 
	 * @description  等待接收的任务消息数
	 * @author       lanxuyu
	 * @CreateTime   2017年11月14日 上午11:40:43
	 * @param startTime
	 * @param endTime
	 * @param ip
	 * @return
	 */
	@RequestMapping("/waitReceiveKtr")
	@ResponseBody
	public String waitReceiveKtr(@RequestParam(name="startTime",defaultValue="")String startTime,
				@RequestParam(name="endTime",defaultValue="")String endTime){
			
			if("".equals(startTime)&&"".equals(endTime)){
				startTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd");
				endTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
				
			}else if(!("".equals(startTime))&&"".equals(endTime)){
				endTime=StringUtil.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");
			}else if("".equals(startTime)&&!("".equals(endTime))){
				StatResult<Object> statResult = new StatResult<>();
				statResult.setMsg("查询失败!");
				statResult.setStatus(0);
				return StringUtil.toJsonString(statResult);
			}
			
			String baseUrl="http://172.16.6.21:8161/api/jolokia";
			StatResult<Map<String, Object>> result = amService.waitReceiveKtr(baseUrl,startTime,endTime);
			return StringUtil.toJsonString(result);
	}
	
	
}
